package cn.ven.service;

import cn.ven.entity.*;
import cn.ven.mapper.CartMapper;
import cn.ven.tool.Token;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;

@Service
public class CartServiceImpl implements CartService{
    @Autowired(required = false)
    CartMapper cartMapper;

    //添加购物车
    @Override
    public void addCart(Cart cart) {
        Cart cart1 = cartMapper.findCart(Token.getUid(), cart.getBookid());//先查询数据库是否已经添加过一次
        if (cart1==null){ //当没有的时候
            cart.setUid(Token.getUid());
            cart.setTcreate(new Date());
            cart.setNum(1);//默认添加一本
            cartMapper.addCart(cart);
        }
        //当里面有这个对象的时候
        //书本数量加1即可
        cartMapper.updateCart(cart1.getUid(),cart1.getBookid());
    }

    //查找用户里面的所有的购物车信息
    @Override
    public List<CartBook> findAll() {
        return cartMapper.findAll(Token.getUid());
    }

    //购物车转订单
    @Override
    //开启事务
    @Transactional(rollbackFor = Exception.class)
    public void addCart2Order(OrdItem ordItem) {
        Order order = ordItem.getOrder();//获取订单明细对象
        order.setTcreate(new Date());//创建时间
        order.setUid(Token.getUid());//把uid加入到订单明细
        cartMapper.addNewOrder(order); //加入到订单明细
        if (order.getOrdid()==null){//当ordid为空的时候，也就是没添加成功
            //抛出异常，使事务回滚
            throw new RuntimeException("插入订单失败, 没有获取主键, 终止事务");
        }
        //添加到订单
        for (ItemBook itemBook:ordItem.getItemBooks()){
            itemBook.setOrdid(order.getOrdid());//绑定对应的订单明细
            cartMapper.addNewOrditem(itemBook);//添加到订单里面
            cartMapper.delCart(itemBook.getBookid(),Token.getUid());//根据书本id以及本用户id删除对应的购物车
        }
    }


}
